/*******************************************************************************
*
* COPYRIGHT(c) 2020, China Mobile IOT
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*	1. Redistributions of source code must retain the above copyright notice,
*	   this list of conditions and the following disclaimer.
*	2. Redistributions in binary form must reproduce the above copyright notice,
*	   this list of conditions and the following disclaimer in the documentation
*	   and/or other materials provided with the distribution.
*	3. Neither the name of China Mobile IOT nor the names of its contributors
*	   may be used to endorse or promote products derived from this software
*	   without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*******************************************************************************/


/**
 * @file cm32m4xxr_crc.h
 * @author CMIOT Firmware Team
 * @version v1.0.0
 *
 * @copyright Copyright (c) 2020, CMIOT. All rights reserved.
 */
#ifndef __CM32M4xxR_CRC_H__
#define __CM32M4xxR_CRC_H__

#ifdef __cplusplus
extern "C" {
#endif


/** @addtogroup CM32M4xxR_StdPeriph_Driver
 * @{
 */

/** @addtogroup CRC
 * @{
 */

/** @addtogroup CRC_Exported_Types
 * @{
 */

/**
 * @}
 */

/** @addtogroup CRC_Exported_Constants
 * @{
 */

/**
 * @}
 */

/** @addtogroup CRC_Exported_Macros
 * @{
 */

/** @addtogroup CRC_endian_format
 * @{
 */
	
#define CRC_LITTLE_ENDIAN_FMT		((uint32_t) 0x00000000)
#define CRC_BIG_ENDIAN_FMT  		((uint32_t) 0x00000001)

#define IS_CRC_ENDIAN_FMT(FMT)	(((FMT) == CRC_LITTLE_ENDIAN_FMT) || ((FMT) == CRC_BIG_ENDIAN_FMT))

/**
 * @}
 */

/** @addtogroup CRC_Exported_Functions
 * @{
 */

void		CRC32_ResetCrc (void);
uint32_t	CRC32_CalcCrc (uint32_t Data);
uint32_t	CRC32_CalcBufCrc (uint32_t pBuffer[], uint32_t BufferLength);
uint32_t	CRC32_GetCrc (void);
void		CRC32_SetIDat (uint8_t IDValue);
uint8_t		CRC32_GetIDat (void);
void		CRC16_SetEndianFmt(uint32_t EndianFormat);
void		CRC16_SetCleanEnable(void);
void		CRC16_SetCrc(uint8_t Data);
uint16_t	CRC16_GetCrc(void);
void		CRC16_SetLRC(uint8_t Data);
uint8_t		CRC16_GetLRC(void);
uint16_t	CRC16_CalcBufCrc (uint8_t pBuffer[], uint32_t BufferLength);
uint16_t	CRC16_CalcCRC (uint8_t Data);

#ifdef __cplusplus
}
#endif

#endif /* __CM32M4xxR_CRC_H__ */
/**
 * @}
 */

/**
 * @}
 */

/**
 * @}
 */
